package com.qdairlines.service.file;

import java.io.File;
import java.io.InputStream;

import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;


/**
 *  
 * @author pangyannan
 * @date 2016年8月5日
 * @company QingDao Airlines
 * @description FastDFS分布式文件系统操作客户端 .  本方法的所有file_id 都是包含group name 和 file name
 */

public interface FastDFSClientService  {
	
	/** 上传文件
	 * @param file 文件     
	 * @param fileName 文件名 ,必须包含后缀
	 * @return 返回Null则为失败
	 */
	public  String uploadFile(File file, String fileName) ;
	
	/**
	 * 通过输入流上传文件
	 * @param inputStream
	 * @param fileName
	 * @param fileLength
	 * @return
	 */
	
	public  String uploadFile(InputStream inputStream, String fileName,long fileLength) ;
	
	/**
	 * 在springmvc中，通过MultipartFile类封装上传附件
	 * @param multipartFile
	 * @return
	 */
	public  String uploadFile(MultipartFile multipartFile);

	
	/**
	 * 根据fileId来删除一个文件，目前我们规定使用这种方式，fileId是在上传时回写在数据库中的
	 * @param fileId
	 * @return 0为成功，非0为失败，具体为错误代码
	 */
	
	public  int deleteFile(String fileId);

	

	/**
	 * 文件下载  返回一个流
	 * @param fileId
	 * @return
	 */
	
	public  InputStream downloadFile(String fileId) ;
	
	/**
	 * 文件下载，返回一个byte数组
	 * @param fileId
	 * @return
	 */
	
	public  byte[] downloadFileTobyte(String fileId);
	
	/**
	 * 文件下载，返回 ResponseEntity<byte[]>
	 * 如果 fileName 是从前台传递过来的，调用此方法，不需要转码
	 * @param fileId
	 * @param fileName
	 * @return
	 */
	
	public  ResponseEntity<byte[]> downloadFile(String fileId,String fileName);
	
	/**
	 * 文件下载，返回 ResponseEntity<byte[]>
	 * 如果 fileName 是从数据库查询获取传递过来的，调用此方法，需要进行转码。
	 * @param fileId
	 * @param fileName
	 * @return
	 */
	public  ResponseEntity<byte[]> downloadFileTranscoding(String fileId,String fileName);
	
	/**
	 * 根据文件id获取 缩略图
	 * @param fileId
	 * @param fileName
	 * @param maxLength  高度和宽度的最大值 ，为像素
	 * @return
	 */
	public  ResponseEntity<byte[]> getSmallImage(String fileId,String fileName, int maxLength);

}
